Add extension point to register JGit PostUploadHooks Plugins may register PostUploadHook instances in order to get notified after JGit is done uploading a pack. Now that PostUploadHook can be registered using the DynamicSet, use that mechanism to register UploadPackMetricsHook. Change-Id: If848bddc85ca8923a5d55f7dd448ac218c910e1c
diff --git a/Documentation/dev-plugins.txt b/Documentation/dev-plugins.txt index 22be05b..7acda4c 100644 --- a/Documentation/dev-plugins.txt +++ b/Documentation/dev-plugins.txt
@@ -498,6 +498,12 @@ for those plugins which would like to monitor usage in Git repositories. +[[post-upload-hook]] +== Post Upload-Pack Hooks + +Plugins may register PostUploadHook instances in order to get notified after +JGit is done uploading a pack. + [[ssh]] == SSH Commands
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GitOverHttpServlet.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GitOverHttpServlet.java index b1db772..bae6d19 100644 --- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GitOverHttpServlet.java +++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/GitOverHttpServlet.java
@@ -31,7 +31,6 @@ import com.google.gerrit.server.git.SearchingChangeCacheImpl; import com.google.gerrit.server.git.TagCache; import com.google.gerrit.server.git.TransferConfig; -import com.google.gerrit.server.git.UploadPackMetricsHook; import com.google.gerrit.server.git.VisibleRefFilter; import com.google.gerrit.server.git.validators.UploadValidators; import com.google.gerrit.server.notedb.ChangeNotes; @@ -51,6 +50,8 @@ import org.eclipse.jgit.http.server.resolver.AsIsFileService; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Repository; +import org.eclipse.jgit.transport.PostUploadHook; +import org.eclipse.jgit.transport.PostUploadHookChain; import org.eclipse.jgit.transport.PreUploadHook; import org.eclipse.jgit.transport.PreUploadHookChain; import org.eclipse.jgit.transport.ReceivePack; @@ -198,16 +199,16 @@ static class UploadFactory implements UploadPackFactory<HttpServletRequest> { private final TransferConfig config; - private final UploadPackMetricsHook uploadMetrics; private final DynamicSet<PreUploadHook> preUploadHooks; + private final DynamicSet<PostUploadHook> postUploadHooks; @Inject UploadFactory(TransferConfig tc, - UploadPackMetricsHook uploadMetrics, - DynamicSet<PreUploadHook> preUploadHooks) { + DynamicSet<PreUploadHook> preUploadHooks, + DynamicSet<PostUploadHook> postUploadHooks) { this.config = tc; - this.uploadMetrics = uploadMetrics; this.preUploadHooks = preUploadHooks; + this.postUploadHooks = postUploadHooks; } @Override @@ -217,7 +218,8 @@ up.setTimeout(config.getTimeout()); up.setPreUploadHook(PreUploadHookChain.newChain( Lists.newArrayList(preUploadHooks))); - up.setPostUploadHook(uploadMetrics); + up.setPostUploadHook( + PostUploadHookChain.newChain(Lists.newArrayList(postUploadHooks))); return up; } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/config/GerritGlobalModule.java b/gerrit-server/src/main/java/com/google/gerrit/server/config/GerritGlobalModule.java index 7ef964c..3ab19bf 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/config/GerritGlobalModule.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/config/GerritGlobalModule.java
@@ -173,6 +173,7 @@ import org.apache.velocity.runtime.RuntimeInstance; import org.eclipse.jgit.lib.Config; import org.eclipse.jgit.transport.PostReceiveHook; +import org.eclipse.jgit.transport.PostUploadHook; import org.eclipse.jgit.transport.PreUploadHook; import java.util.List; @@ -314,6 +315,7 @@ DynamicSet.setOf(binder(), ReceivePackInitializer.class); DynamicSet.setOf(binder(), PostReceiveHook.class); DynamicSet.setOf(binder(), PreUploadHook.class); + DynamicSet.setOf(binder(), PostUploadHook.class); DynamicSet.setOf(binder(), ChangeIndexedListener.class); DynamicSet.setOf(binder(), NewProjectCreatedListener.class); DynamicSet.setOf(binder(), ProjectDeletedListener.class);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/GitModule.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/GitModule.java index aa0fc55..e609d68 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/git/GitModule.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/GitModule.java
@@ -15,6 +15,9 @@ package com.google.gerrit.server.git; import com.google.gerrit.extensions.config.FactoryModule; +import com.google.gerrit.extensions.registration.DynamicSet; + +import org.eclipse.jgit.transport.PostUploadHook; /** Configures the Git support. */ public class GitModule extends FactoryModule { @@ -24,5 +27,7 @@ factory(MetaDataUpdate.InternalFactory.class); bind(MetaDataUpdate.Server.class); bind(ReceiveConfig.class); + DynamicSet.bind(binder(), PostUploadHook.class) + .to(UploadPackMetricsHook.class); } } diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/Upload.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/Upload.java index 644ff6e..181b0c6 100644 --- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/Upload.java +++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/Upload.java
@@ -21,7 +21,6 @@ import com.google.gerrit.server.git.SearchingChangeCacheImpl; import com.google.gerrit.server.git.TagCache; import com.google.gerrit.server.git.TransferConfig; -import com.google.gerrit.server.git.UploadPackMetricsHook; import com.google.gerrit.server.git.VisibleRefFilter; import com.google.gerrit.server.git.validators.UploadValidationException; import com.google.gerrit.server.git.validators.UploadValidators; @@ -30,6 +29,8 @@ import com.google.gerrit.sshd.SshSession; import com.google.inject.Inject; +import org.eclipse.jgit.transport.PostUploadHook; +import org.eclipse.jgit.transport.PostUploadHookChain; import org.eclipse.jgit.transport.PreUploadHook; import org.eclipse.jgit.transport.PreUploadHookChain; import org.eclipse.jgit.transport.UploadPack; @@ -59,14 +60,14 @@ private DynamicSet<PreUploadHook> preUploadHooks; @Inject + private DynamicSet<PostUploadHook> postUploadHooks; + + @Inject private UploadValidators.Factory uploadValidatorsFactory; @Inject private SshSession session; - @Inject - private UploadPackMetricsHook uploadMetrics; - @Override protected void runImpl() throws IOException, Failure { if (!projectControl.canRunUploadPack()) { @@ -80,7 +81,8 @@ true)); up.setPackConfig(config.getPackConfig()); up.setTimeout(config.getTimeout()); - up.setPostUploadHook(uploadMetrics); + up.setPostUploadHook( + PostUploadHookChain.newChain(Lists.newArrayList(postUploadHooks))); List<PreUploadHook> allPreUploadHooks = Lists.newArrayList(preUploadHooks); allPreUploadHooks.add(uploadValidatorsFactory.create(project, repo,